package Number

import "strconv"

// MakeFloat64 转换位float64
func MakeFloat64(data interface{}) float64 {
	if value, ok := data.(float64); ok {
		return value
	}
	if value, ok := data.(float32); ok {
		return float64(value)
	}
	if value, ok := data.(int64); ok {
		return float64(value)
	}
	if value, ok := data.(int32); ok {
		return float64(value)
	}
	if value, ok := data.(int16); ok {
		return float64(value)
	}
	if value, ok := data.(int8); ok {
		return float64(value)
	}
	if value, ok := data.(int); ok {
		return float64(value)
	}
	if value, ok := data.(uint64); ok {
		return float64(value)
	}
	if value, ok := data.(uint32); ok {
		return float64(value)
	}
	if value, ok := data.(uint16); ok {
		return float64(value)
	}
	if value, ok := data.(uint8); ok {
		return float64(value)
	}

	return 0
}

// MakeInt64 转换位init64
func MakeInt64(data interface{}) int64 {
	if value, ok := data.(float64); ok {
		return int64(value)
	}
	if value, ok := data.(float32); ok {
		return int64(value)
	}
	if value, ok := data.(int64); ok {
		return value
	}
	if value, ok := data.(int32); ok {
		return int64(value)
	}
	if value, ok := data.(int16); ok {
		return int64(value)
	}
	if value, ok := data.(int8); ok {
		return int64(value)
	}
	if value, ok := data.(int); ok {
		return int64(value)
	}
	if value, ok := data.(uint64); ok {
		return int64(value)
	}
	if value, ok := data.(uint32); ok {
		return int64(value)
	}
	if value, ok := data.(uint16); ok {
		return int64(value)
	}
	if value, ok := data.(uint8); ok {
		return int64(value)
	}

	return 0
}

func MakeInt(data interface{}) int {
	return int(MakeInt64(data))
}

func ParseFloat64(data string) float64 {
	val, err := strconv.ParseFloat(data, 64)
	if err != nil {
		return 0
	}

	return val
}

func ParseFloat32(data string) float32 {
	return float32(ParseFloat64(data))
}

func ParseInt64(data string) int64 {
	val, err := strconv.ParseInt(data, 10, 64)
	if err != nil {
		return 0
	}

	return val
}

func ParseInt32(data string) int32 {
	return int32(ParseInt64(data))
}
